package site.wlwsjsx.iot_backend.mapper;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import site.wlwsjsx.iot_backend.entity.EmergencyPowerOffEvent;

import java.time.LocalDateTime;
import java.util.List;

@Mapper
public interface EmergencyPowerOffEventMapper {
    // 插入紧急断电事件记录
    int insert(EmergencyPowerOffEvent emergencyPowerOffEvent);

    // 根据ID查询紧急断电事件
    EmergencyPowerOffEvent selectById(@Param("id") Long id);

    // 根据设备ID查询紧急断电事件
    List<EmergencyPowerOffEvent> selectByDeviceId(@Param("deviceId") String deviceId);

    // 根据用户名查询紧急断电事件
    List<EmergencyPowerOffEvent> selectByUsername(@Param("username") String username);

    // 查询所有未处理的紧急断电事件
    List<EmergencyPowerOffEvent> selectUnprocessedEvents();

    // 根据时间范围查询紧急断电事件
    List<EmergencyPowerOffEvent> selectByTimeRange(
            @Param("startTime") LocalDateTime startTime,
            @Param("endTime") LocalDateTime endTime);

    // 分页查询紧急断电事件
    List<EmergencyPowerOffEvent> selectByPage(
            @Param("offset") int offset,
            @Param("pageSize") int pageSize);

    // 统计紧急断电事件总数
    Long countAll();

    // 根据条件统计紧急断电事件数量
    Long countByCondition(
            @Param("deviceId") String deviceId,
            @Param("username") String username,
            @Param("processed") Integer processed,
            @Param("startTime") LocalDateTime startTime,
            @Param("endTime") LocalDateTime endTime);

    // 根据条件查询紧急断电事件
    List<EmergencyPowerOffEvent> selectByCondition(
            @Param("deviceId") String deviceId,
            @Param("username") String username,
            @Param("processed") Integer processed,
            @Param("startTime") LocalDateTime startTime,
            @Param("endTime") LocalDateTime endTime,
            @Param("offset") int offset,
            @Param("pageSize") int pageSize);

    // 更新处理状态
    int updateProcessedStatus(@Param("id") Long id, @Param("processed") Integer processed);

    // 批量更新处理状态
    int batchUpdateProcessedStatus(@Param("ids") List<Long> ids, @Param("processed") Integer processed);

    // 根据ID删除记录
    int deleteById(@Param("id") Long id);

    // 删除指定时间之前的记录
    int deleteByTimeBefore(@Param("beforeTime") LocalDateTime beforeTime);
}
